using System;
using System.Collections.Generic;

namespace Xamarin.Linker {

	public abstract class MobileProfile : BaseProfile {

		static readonly HashSet<string> Sdk = new HashSet<string> {
			"mscorlib",
			"System",
			"System.ComponentModel.Composition",
			"System.ComponentModel.DataAnnotations",
			"System.Core",
			"System.Data",
			"System.Data.Services.Client",
			"System.IdentityModel",
			"System.IO.Compression.FileSystem",
			"System.IO.Compression",
			"System.Json",
			"System.Net",
			"System.Net.Http",
			"System.Net.Http.WinHttpHandler",
			"System.Numerics",
			"System.Numerics.Vectors",
			"System.Reflection.Context",
			"System.Runtime.Serialization",
			"System.Security",
			"System.ServiceModel",
			"System.ServiceModel.Internals",
			"System.ServiceModel.Web",
			"System.Transactions",
			"System.Web.Services",
			"System.Windows",
			"System.Xml",
			"System.Xml.Linq",
			"System.Xml.Serialization",
			"Microsoft.CSharp",
			"Microsoft.VisualBasic",
			"Mono.CSharp",
			"Mono.Data.Tds",
			"Mono.Data.Sqlite",
			"Mono.Dynamic.Interpreter",
			"Mono.Security",
			"OpenTK",
			"OpenTK-1.0",
			// Facades assemblies (PCL)
			"Microsoft.Win32.Primitives",
			"Microsoft.Win32.Registry.AccessControl",
			"Microsoft.Win32.Registry",
			"System.AppContext",
			"System.Collections.Concurrent",
			"System.Collections.NonGeneric",
			"System.Collections.Specialized",
			"System.Collections",
			"System.ComponentModel.Annotations",
			"System.ComponentModel.EventBasedAsync",
			"System.ComponentModel.Primitives",
			"System.ComponentModel.TypeConverter",
			"System.ComponentModel",
			"System.Console",
			"System.Data.Common",
			"System.Data.SqlClient",
			"System.Diagnostics.Contracts",
			"System.Diagnostics.Debug",
			"System.Diagnostics.FileVersionInfo",
			"System.Diagnostics.Process",
			"System.Diagnostics.StackTrace",
			"System.Diagnostics.TextWriterTraceListener",
			"System.Diagnostics.Tools",
			"System.Diagnostics.TraceEvent",
			"System.Diagnostics.TraceSource",
			"System.Diagnostics.Tracing",
			"System.Drawing.Common",
			"System.Drawing.Primitives",
			"System.Dynamic.Runtime",
			"System.Globalization.Calendars",
			"System.Globalization.Extensions",
			"System.Globalization",
			"System.IO",
			"System.IO.Compression.ZipFile",
			"System.IO.FileSystem.AccessControl",
			"System.IO.FileSystem.DriveInfo",
			"System.IO.FileSystem.Primitives",
			"System.IO.FileSystem.Watcher",
			"System.IO.FileSystem",
			"System.IO.IsolatedStorage",
			"System.IO.MemoryMappedFiles",
			"System.IO.Pipes",
			"System.IO.UnmanagedMemoryStream",
			"System.Linq.Expressions",
			"System.Linq.Parallel",
			"System.Linq.Queryable",
			"System.Linq",
			"System.Memory",
			"System.Net.AuthenticationManager",
			"System.Net.Cache",
			"System.Net.Http.Rtc",
			"System.Net.HttpListener",
			"System.Net.Mail",
			"System.Net.NameResolution",
			"System.Net.NetworkInformation",
			"System.Net.Ping",
			"System.Net.Primitives",
			"System.Net.Requests",
			"System.Net.Security",
			"System.Net.ServicePoint",
			"System.Net.Sockets",
			"System.Net.Utilities",
			"System.Net.WebHeaderCollection",
			"System.Net.WebSockets.Client",
			"System.Net.WebSockets",
			"System.ObjectModel",
			"System.Reflection.DispatchProxy",
			"System.Reflection.Emit.ILGeneration",
			"System.Reflection.Emit.Lightweight",
			"System.Reflection.Emit",
			"System.Reflection.Extensions",
			"System.Reflection.Primitives",
			"System.Reflection.TypeExtensions",
			"System.Reflection",
			"System.Resources.Reader",
			"System.Resources.ReaderWriter",
			"System.Resources.ResourceManager",
			"System.Resources.Writer",
			"System.Runtime.CompilerServices.VisualC",
			"System.Runtime.Extensions",
			"System.Runtime.Handles",
			"System.Runtime.InteropServices",
			"System.Runtime.InteropServices.RuntimeInformation",
			"System.Runtime.InteropServices.WindowsRuntime",
			"System.Runtime.Loader",
			"System.Runtime.Numerics",
			"System.Runtime.Serialization.Formatters",
			"System.Runtime.Serialization.Json",
			"System.Runtime.Serialization.Primitives",
			"System.Runtime.Serialization.Xml",
			"System.Runtime",
			"System.Security.AccessControl",
			"System.Security.Claims",
			"System.Security.Cryptography.Algorithms",
			"System.Security.Cryptography.Cng",
			"System.Security.Cryptography.Csp",
			"System.Security.Cryptography.DeriveBytes",
			"System.Security.Cryptography.Encoding",
			"System.Security.Cryptography.Encryption.Aes",
			"System.Security.Cryptography.Encryption.ECDiffieHellman",
			"System.Security.Cryptography.Encryption.ECDsa",
			"System.Security.Cryptography.Encryption",
			"System.Security.Cryptography.Hashing.Algorithms",
			"System.Security.Cryptography.Hashing",
			"System.Security.Cryptography.OpenSsl",
			"System.Security.Cryptography.Pkcs",
			"System.Security.Cryptography.Primitives",
			"System.Security.Cryptography.ProtectedData",
			"System.Security.Cryptography.RSA",
			"System.Security.Cryptography.RandomNumberGenerator",
			"System.Security.Cryptography.X509Certificates",
			"System.Security.Principal.Windows",
			"System.Security.Principal",
			"System.Security.SecureString",
			"System.ServiceModel.Duplex",
			"System.ServiceModel.NetTcp",
			"System.ServiceModel.Http",
			"System.ServiceModel.Primitives",
			"System.ServiceModel.Security",
			"System.ServiceProcess.ServiceController",
			"System.Text.Encoding.CodePages",
			"System.Text.Encoding.Extensions",
			"System.Text.Encoding",
			"System.Text.RegularExpressions",
			"System.Threading.AccessControl",
			"System.Threading.Overlapped",
			"System.Threading.Tasks.Parallel",
			"System.Threading.Tasks",
			"System.Threading.Thread",
			"System.Threading.ThreadPool",
			"System.Threading.Timer",
			"System.Threading",
			"System.ValueTuple",
			"System.Xml.ReaderWriter",
			"System.Xml.XDocument",
			"System.Xml.XPath.XDocument",
			"System.Xml.XPath.XmlDocument",
			"System.Xml.XPath",
			"System.Xml.XmlDocument",
			"System.Xml.XmlSerializer",
			"System.Xml.Xsl.Primitives",
			"netstandard"
		};

		protected override bool IsSdk (string assemblyName)
		{
			return Sdk.Contains (assemblyName);
		}
	}
}
